﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using produccion.vistamodelo;
using System.ComponentModel;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMmanciud.xaml
    /// </summary>
    public partial class FRMmanciud : Window
    {
        manciud _manciud;

        public FRMmanciud()
        {
            InitializeComponent();
            _manciud = (manciud)this.DataContext;
        }
   
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _manciud.listaCiudad();
            limpiar();
            if (_manciud.lisFilCiu.Count > 0)
            {
                dataGrid1.SelectedIndex = 0;
            }
            Keyboard.Focus(texCod);
        }

        private void limpiar() 
        {
            texCod.Text = "";
            texDep.Text = "";
            texDes.Text = "";
            texFac.Text = "";
            texInd.Text = "";
            texNom.Text = "";
            texVal.Text = "";
            _manciud.txtCiudad.CAMBIO = false;
            _manciud.txtCiudad.conCodCiu();
        }

        string camb;
        private void texCod_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (_manciud.txtCiudad.CODCIU_CIU != camb)
            {
                if (_manciud.txtCiudad.CAMBIO)
                {
                    if (MessageBox.Show("¿Está seguro que desea cambiar de elemento? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)//RRR
                    {
                        _manciud.txtCiudad.CODCIU_CIU = camb;
                        return;
                    }
                    _manciud.txtCiudad.CAMBIO = false;
                }
                camb = _manciud.txtCiudad.CODCIU_CIU;
                _manciud.txtCiudad.consultar();
                if (!_manciud.txtCiudad.EXISTE)
                {
                    texDep.Text = "";
                    texDes.Text = "";
                    texFac.Text = "";
                    texInd.Text = "";
                    texNom.Text = "";
                    texVal.Text = "";
                    _manciud.txtCiudad.CAMBIO = false;
                }
            }
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (_manciud.txtCiudad.CAMBIO)
            {
                if (MessageBox.Show("¿Está seguro que desea salir? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)
                {
                    e.Cancel = true;
                }
                else{
                _manciud.txtCiudad.CAMBIO = false;
                }
            }
        }

        private void butNue_Click(object sender, RoutedEventArgs e)
        {
            texCod.Focus();
            texCod.Select(0, 0);
            if (_manciud.txtCiudad.CAMBIO)
            {
                if (MessageBox.Show("¿Está seguro que desea crear un nuevo elemento? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)//RRR
                {
                    return;
                }
                _manciud.txtCiudad.CAMBIO = false;
            }

            limpiar();
            _manciud.txtCiudad.conCodCiu();
        }

        private void butSal_Click(object sender, RoutedEventArgs e)
        {
              this.Close();
        }
        
        private void butEli_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("¿Esta seguro que desea eliminar el elemento?", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel) {
                return;
            }
            _manciud.eliminar(wPnot);
            limpiar();
            _manciud.txtCiudad.conCodCiu();
        }

        private void butGua_Click(object sender, RoutedEventArgs e)
        {
            _manciud.guardar(wPnot);
        }

        private void cm_Closed(object sender, RoutedEventArgs e)
        {
            _manciud.filtrar();
        }

        private void quiFil_Click(object sender, RoutedEventArgs e)
        {
            _manciud.quiFil();
        }

        private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
                if (_manciud.txtCiudad.CAMBIO)
                {
                    if (MessageBox.Show("¿Está seguro que desea cambiar de elemento? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)//RRR
                    {
                       return;
                    }
                    _manciud.txtCiudad.CAMBIO = false;
                }
                if (_manciud.selCiudad != null)
                {
                    _manciud.txtCiudad.CODCIU_CIU = _manciud.selCiudad.CODCIU_CIU;
                    _manciud.txtCiudad.EXISTE = true;
                }
        }

        private void dataGrid1_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }


        //----------------------------------------------------------------
        //private void butConCiu_Click(object sender, RoutedEventArgs e)
        //{
        //    _manciud.buscCiud();
        //    texCod.Focus();
        //    texCod.Select(0, 0);
        //}
    }

    internal class manciud:ObservableObject 
    {

        #region propiedades

        //----------------------------------------------------------
        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }

        private VMbuscarGeneral _buscarCiudad;
        public VMbuscarGeneral buscarCiudad
        {
            get { return _buscarCiudad; }
            set { _buscarCiudad = value; RaisePropertyChangedEvent("buscarCiudad"); }
        }

        private clases.CLSMAECIUP _txtCiudad = new clases.CLSMAECIUP();
        public clases.CLSMAECIUP txtCiudad {
            get { return _txtCiudad; } 
            set { _txtCiudad = value;
            RaisePropertyChangedEvent("txtCiudad");
            }
        }

        private clases.CLSMAECIUP _filCiudad = new clases.CLSMAECIUP { CODCIU_CIU = "", DEPCIU_CIU = "", DTOCIU_CIU = "", FACCIU_CIU = "", INDCIU_CIU = "", NOMCIU_CIU = "", VLRKIL_CIU = 0 };
        public clases.CLSMAECIUP filCiudad
        {
            get { return _filCiudad; }
            set
            {
                _filCiudad = value;
                RaisePropertyChangedEvent("filCiudad");
            }
        }

        private clases.CLSMAECIUP _selCiudad = new clases.CLSMAECIUP();
        public clases.CLSMAECIUP selCiudad
        {
            get { return _selCiudad; }
            set
            {
                _selCiudad = value;
                RaisePropertyChangedEvent("selCiudad");
             
            }
        }

        private List<clases.CLSMAECIUP> _lisCiudad = new List<clases.CLSMAECIUP>();
        public List<clases.CLSMAECIUP> lisCiudad
        {
            get { return _lisCiudad; }
            set
            {
                _lisCiudad = value;
                RaisePropertyChangedEvent("lisCiudad");
            }
        }

        private List<clases.CLSMAECIUP> _lisFilCiu = new List<clases.CLSMAECIUP>();
        public List<clases.CLSMAECIUP> lisFilCiu
        {
            get { return _lisFilCiu; }
            set
            {
                _lisFilCiu = value;
                RaisePropertyChangedEvent("lisFilCiu");
            }
        }

    
        public void buscCiud() {
            try {
                clases.CLSMAECIUP datos = new clases.CLSMAECIUP();
                FRMbuscar frm = new FRMbuscar(datos, "buscar", "Nombre_ciudad", "NOMCIU_CIU", "Codigo");
                frm.ShowDialog();
                txtCiudad.CODCIU_CIU = frm.retorno;
                
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }        
        }

        #endregion

        //----------------------------------------------------------
        public manciud()
        {
            cargarCiudades();
            MDOgeneral.conectar();
            strTituloVentana = "Mantenimiento de ciudades - Usuario: " + MDOgeneral.usuario + " - [FRMmanciud]";
        }

        private void cargarCiudades()
        {
            try
            {
                List<clases.CLSMAECIUP> lisCiudades = new clases.CLSMAECIUP().listaCiudad();
                _buscarCiudad = new VMbuscarGeneral((from cli in lisCiudades select new 
                    VMlistaGenerica { strColumna1 = cli.CODCIU_CIU, strColumna2 = cli.DEPCIU_CIU, strColumna3 = cli.NOMCIU_CIU }).ToList());
                buscarCiudad.PropertyChanged += onBuscarCiudadPropertyChanged;
                buscarCiudad.gridBuscar.columna1.strNombre = "Código";
                buscarCiudad.gridBuscar.columna2.strNombre = "Nombre Departamento";
                buscarCiudad.gridBuscar.columna3.strNombre = "Nombre Ciudad";
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        void onBuscarCiudadPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            try
            {
                if (e.PropertyName == "IsOpen")
                {
                    if (!buscarCiudad.IsOpen)
                    {
                        if (buscarCiudad.gridBuscar.selLista != null)
                        {
                            txtCiudad.CODCIU_CIU = buscarCiudad.gridBuscar.selLista.strColumna1;
                        }
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        RelayCommand _cmdBuscarCiudad;
        public ICommand cmdBuscarCiudad
        {
            get
            {
                if (_cmdBuscarCiudad == null)
                {
                    _cmdBuscarCiudad = new RelayCommand(r => buscar_Ciudad());
                }
                return _cmdBuscarCiudad;
            }
        }

        private void buscar_Ciudad()
        {
            try
            {
                buscarCiudad.IsOpen = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        #region metodos
        
        public void listaCiudad()
        {
            try
            {
                lisCiudad = selCiudad.listaCiudad();
                lisFilCiu = lisCiudad;
             
            }
            catch (Exception ex) {MessageBox.Show(ex.Message);}
        }
        
        public void guardar(WrapPanel wPnot)
        {
            try
            {

                if (txtCiudad.EXISTE)
                {
                    if (txtCiudad.actualizar() > 0)
                    {
                        txtCiudad.CAMBIO = false;
                        lisCiudad.Clear();
                        lisCiudad = txtCiudad.listaCiudad();
                        filtrar();
                        new MDOgeneral.notificar(wPnot, "Los cambios fueron guardados satisfactoriamente.", true);
                    }
                    else
                    {
                        new MDOgeneral.notificar(wPnot, "Los cambios no pueden ser guardados.", false);
                    }
                }
                else
                {
                    if (txtCiudad.insertar() > 0)
                    {
                        txtCiudad.CAMBIO = false;
                        txtCiudad.EXISTE = true;
                        lisCiudad.Clear();
                        lisCiudad = txtCiudad.listaCiudad();
                        filtrar();                       
                        new MDOgeneral.notificar(wPnot, "El elemento fue creado satisfactoriamente.", true);
                    }
                    else
                    {
                        new MDOgeneral.notificar(wPnot, "El elemento no puede ser creado.", false);
                    }
                }

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        
        public void eliminar(WrapPanel wPnot)
        {
            try
            {
                if (txtCiudad.eliminar() > 0)
                {
                    txtCiudad.CAMBIO = false;
                    lisCiudad.Clear();
                    lisCiudad = txtCiudad.listaCiudad();
                    filtrar();
                    new MDOgeneral.notificar(wPnot, "El elemento ha sido eliminado satisfactoriamente.", true);
                }
                else
                {
                    new MDOgeneral.notificar(wPnot, "El elemento no puede ser eliminado.", false);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }     
        }

        public void filtrar() {
            lisFilCiu = lisCiudad.FindAll(r => 
                r.CODCIU_CIU.ToUpper().Contains(filCiudad.CODCIU_CIU.ToUpper()) &
                r.DEPCIU_CIU.ToUpper().Contains(filCiudad.DEPCIU_CIU.ToUpper()) &
                r.DTOCIU_CIU.ToUpper().Replace(",", ".").Contains(filCiudad.DTOCIU_CIU.ToUpper()) &
                r.FACCIU_CIU.ToUpper().Replace(",", ".").Contains(filCiudad.FACCIU_CIU.ToUpper()) &
                r.NOMCIU_CIU.ToUpper().Contains(filCiudad.NOMCIU_CIU.ToUpper()) &
                r.VLRKIL_CIU.ToString().Contains(filCiudad.VLRKIL_CIU.ToString()) &
                r.INDCIU_CIU.ToUpper().Contains(filCiudad.INDCIU_CIU.ToUpper()));
            lisFilCiu.Add(new clases.CLSMAECIUP { CODCIU_CIU = "", DEPCIU_CIU = "", DTOCIU_CIU = "", FACCIU_CIU = "", INDCIU_CIU = "", NOMCIU_CIU = "", VLRKIL_CIU = 0 });
        }

        public void quiFil()
        {
            filCiudad = new clases.CLSMAECIUP { CODCIU_CIU = "", DEPCIU_CIU = "", DTOCIU_CIU = "", FACCIU_CIU = "", INDCIU_CIU = "", NOMCIU_CIU = "", VLRKIL_CIU = 0 };
            lisFilCiu = lisCiudad.FindAll(r => r.CODCIU_CIU.ToUpper().Contains(filCiudad.CODCIU_CIU) & r.DEPCIU_CIU.ToUpper().Contains(filCiudad.DEPCIU_CIU) & r.DTOCIU_CIU.ToUpper().Contains(filCiudad.DTOCIU_CIU) & r.FACCIU_CIU.ToUpper().Contains(filCiudad.FACCIU_CIU) & r.NOMCIU_CIU.ToUpper().Contains(filCiudad.NOMCIU_CIU) & r.VLRKIL_CIU.ToString().Contains(filCiudad.VLRKIL_CIU.ToString()));
        }

        #endregion

    }
}
